#include "stm32f10x.h"

uint8_t Keyboard_num;
uint8_t Keyboard_char[16]={0x09,0x0C,0x02,0x01,0x06,0x0B,0x08,0x07,0x0F,0x0D,0x05,0x04,0x03,0x0A,0x00,0x0E};
uint8_t Keyboard_count=0;
uint8_t Keyboard_number=16;
uint8_t Keyboard_delay=0;

/**
  * @brief  KEYBOARD_INIT
  * @param  -
  * @retval -
  */
void Keyboard_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
		
	GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitTypeDef GPIO_InitStructure_1;
	GPIO_InitStructure_1.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure_1.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure_1.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure_1);	
}

/**
  * @brief  KEYBOARD_OF_T0
  * @param  -
  * @retval -
  */
void Keyboard_sweep(void)
{
	Keyboard_count++;
	if(Keyboard_count==8)Keyboard_count=0;
	switch(Keyboard_count)
	{
		case 0 : GPIO_ResetBits(GPIOB, GPIO_Pin_3);	GPIO_ResetBits(GPIOB, GPIO_Pin_4);	GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;
		case 1 : GPIO_ResetBits(GPIOB, GPIO_Pin_3);	GPIO_ResetBits(GPIOB, GPIO_Pin_4);	GPIO_SetBits(GPIOB, GPIO_Pin_5);break;
		case 2 : GPIO_ResetBits(GPIOB, GPIO_Pin_3);	GPIO_SetBits(GPIOB, GPIO_Pin_4);	  GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;
		case 3 : GPIO_ResetBits(GPIOB, GPIO_Pin_3);	GPIO_SetBits(GPIOB, GPIO_Pin_4);	  GPIO_SetBits(GPIOB, GPIO_Pin_5);break;
		case 4 : GPIO_SetBits(GPIOB, GPIO_Pin_3);	  GPIO_ResetBits(GPIOB, GPIO_Pin_4);	GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;
		case 5 : GPIO_SetBits(GPIOB, GPIO_Pin_3);	  GPIO_ResetBits(GPIOB, GPIO_Pin_4);	GPIO_SetBits(GPIOB, GPIO_Pin_5);break;
		case 6 : GPIO_SetBits(GPIOB, GPIO_Pin_3);   GPIO_SetBits(GPIOB, GPIO_Pin_4);	  GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;
		case 7 : GPIO_SetBits(GPIOB, GPIO_Pin_3);   GPIO_SetBits(GPIOB, GPIO_Pin_4);	  GPIO_SetBits(GPIOB, GPIO_Pin_5);break;
	}
	if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) == 0||GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7) == 0)
	{
		Keyboard_num=Keyboard_count*2+!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
		Keyboard_number=Keyboard_char[Keyboard_num];
	}
	if(Keyboard_number!=16)
		{
			if(Keyboard_delay<200)Keyboard_delay++;
			else
			{
				Keyboard_delay=0;
				Keyboard_number=16;				
			}
		}
}
